package org.jivesoftware.smack.proxy;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.net.SocketFactory;

public class Socks5ProxySocketFactory extends SocketFactory
{
  private ProxyInfo proxy;

  public Socks5ProxySocketFactory(ProxyInfo paramProxyInfo)
  {
    this.proxy = paramProxyInfo;
  }

  private void fill(InputStream paramInputStream, byte[] paramArrayOfByte, int paramInt)
    throws IOException
  {
    int i = 0;
    while (true)
    {
      if (i >= paramInt)
        return;
      int j = paramInputStream.read(paramArrayOfByte, i, paramInt - i);
      if (j <= 0)
        throw new ProxyException(ProxyInfo.ProxyType.SOCKS5, "stream is closed");
      i += j;
    }
  }

  // ERROR //
  private Socket socks5ProxifiedSocket(String paramString, int paramInt)
    throws IOException
  {
    // Byte code:
    //   0: aconst_null
    //   1: astore_3
    //   2: aload_0
    //   3: getfield 13	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:proxy	Lorg/jivesoftware/smack/proxy/ProxyInfo;
    //   6: invokevirtual 48	org/jivesoftware/smack/proxy/ProxyInfo:getProxyAddress	()Ljava/lang/String;
    //   9: astore 4
    //   11: aload_0
    //   12: getfield 13	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:proxy	Lorg/jivesoftware/smack/proxy/ProxyInfo;
    //   15: invokevirtual 52	org/jivesoftware/smack/proxy/ProxyInfo:getProxyPort	()I
    //   18: istore 5
    //   20: aload_0
    //   21: getfield 13	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:proxy	Lorg/jivesoftware/smack/proxy/ProxyInfo;
    //   24: invokevirtual 55	org/jivesoftware/smack/proxy/ProxyInfo:getProxyUsername	()Ljava/lang/String;
    //   27: astore 6
    //   29: aload_0
    //   30: getfield 13	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:proxy	Lorg/jivesoftware/smack/proxy/ProxyInfo;
    //   33: invokevirtual 58	org/jivesoftware/smack/proxy/ProxyInfo:getProxyPassword	()Ljava/lang/String;
    //   36: astore 7
    //   38: new 60	java/net/Socket
    //   41: dup
    //   42: aload 4
    //   44: iload 5
    //   46: invokespecial 63	java/net/Socket:<init>	(Ljava/lang/String;I)V
    //   49: astore 8
    //   51: aload 8
    //   53: invokevirtual 67	java/net/Socket:getInputStream	()Ljava/io/InputStream;
    //   56: astore 17
    //   58: aload 8
    //   60: invokevirtual 71	java/net/Socket:getOutputStream	()Ljava/io/OutputStream;
    //   63: astore 18
    //   65: aload 8
    //   67: iconst_1
    //   68: invokevirtual 75	java/net/Socket:setTcpNoDelay	(Z)V
    //   71: sipush 1024
    //   74: newarray byte
    //   76: astore 19
    //   78: iconst_0
    //   79: iconst_1
    //   80: iadd
    //   81: istore 20
    //   83: aload 19
    //   85: iconst_0
    //   86: iconst_5
    //   87: bastore
    //   88: iload 20
    //   90: iconst_1
    //   91: iadd
    //   92: istore 21
    //   94: aload 19
    //   96: iload 20
    //   98: iconst_2
    //   99: bastore
    //   100: iload 21
    //   102: iconst_1
    //   103: iadd
    //   104: istore 22
    //   106: aload 19
    //   108: iload 21
    //   110: iconst_0
    //   111: bastore
    //   112: iload 22
    //   114: iconst_1
    //   115: iadd
    //   116: istore 23
    //   118: aload 19
    //   120: iload 22
    //   122: iconst_2
    //   123: bastore
    //   124: aload 18
    //   126: aload 19
    //   128: iconst_0
    //   129: iload 23
    //   131: invokevirtual 81	java/io/OutputStream:write	([BII)V
    //   134: aload_0
    //   135: aload 17
    //   137: aload 19
    //   139: iconst_2
    //   140: invokespecial 83	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:fill	(Ljava/io/InputStream;[BI)V
    //   143: iconst_0
    //   144: istore 24
    //   146: aload 19
    //   148: iconst_1
    //   149: baload
    //   150: istore 25
    //   152: iload 25
    //   154: sipush 255
    //   157: iand
    //   158: tableswitch	default:+26 -> 184, 0:+58->216, 1:+26->184, 2:+64->222
    //   185: dload 154
    //   187: nop
    //   188: lreturn
    //   189: aload 8
    //   191: invokevirtual 86	java/net/Socket:close	()V
    //   194: new 25	org/jivesoftware/smack/proxy/ProxyException
    //   197: dup
    //   198: getstatic 31	org/jivesoftware/smack/proxy/ProxyInfo$ProxyType:SOCKS5	Lorg/jivesoftware/smack/proxy/ProxyInfo$ProxyType;
    //   201: ldc 88
    //   203: invokespecial 36	org/jivesoftware/smack/proxy/ProxyException:<init>	(Lorg/jivesoftware/smack/proxy/ProxyInfo$ProxyType;Ljava/lang/String;)V
    //   206: athrow
    //   207: astore 15
    //   209: aload 15
    //   211: astore 16
    //   213: aload 16
    //   215: athrow
    //   216: iconst_1
    //   217: istore 24
    //   219: goto -35 -> 184
    //   222: aload 6
    //   224: ifnull -40 -> 184
    //   227: aload 7
    //   229: ifnull -45 -> 184
    //   232: iconst_0
    //   233: iconst_1
    //   234: iadd
    //   235: istore 26
    //   237: aload 19
    //   239: iconst_0
    //   240: iconst_1
    //   241: bastore
    //   242: iload 26
    //   244: iconst_1
    //   245: iadd
    //   246: istore 27
    //   248: aload 19
    //   250: iload 26
    //   252: aload 6
    //   254: invokevirtual 93	java/lang/String:length	()I
    //   257: i2b
    //   258: bastore
    //   259: aload 6
    //   261: invokevirtual 97	java/lang/String:getBytes	()[B
    //   264: iconst_0
    //   265: aload 19
    //   267: iload 27
    //   269: aload 6
    //   271: invokevirtual 93	java/lang/String:length	()I
    //   274: invokestatic 103	java/lang/System:arraycopy	(Ljava/lang/Object;ILjava/lang/Object;II)V
    //   277: iconst_2
    //   278: aload 6
    //   280: invokevirtual 93	java/lang/String:length	()I
    //   283: iadd
    //   284: istore 28
    //   286: iload 28
    //   288: iconst_1
    //   289: iadd
    //   290: istore 29
    //   292: aload 19
    //   294: iload 28
    //   296: aload 7
    //   298: invokevirtual 93	java/lang/String:length	()I
    //   301: i2b
    //   302: bastore
    //   303: aload 7
    //   305: invokevirtual 97	java/lang/String:getBytes	()[B
    //   308: iconst_0
    //   309: aload 19
    //   311: iload 29
    //   313: aload 7
    //   315: invokevirtual 93	java/lang/String:length	()I
    //   318: invokestatic 103	java/lang/System:arraycopy	(Ljava/lang/Object;ILjava/lang/Object;II)V
    //   321: aload 18
    //   323: aload 19
    //   325: iconst_0
    //   326: iload 29
    //   328: aload 7
    //   330: invokevirtual 93	java/lang/String:length	()I
    //   333: iadd
    //   334: invokevirtual 81	java/io/OutputStream:write	([BII)V
    //   337: aload_0
    //   338: aload 17
    //   340: aload 19
    //   342: iconst_2
    //   343: invokespecial 83	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:fill	(Ljava/io/InputStream;[BI)V
    //   346: aload 19
    //   348: iconst_1
    //   349: baload
    //   350: ifne -166 -> 184
    //   353: iconst_1
    //   354: istore 24
    //   356: goto -172 -> 184
    //   359: iconst_0
    //   360: iconst_1
    //   361: iadd
    //   362: istore 30
    //   364: aload 19
    //   366: iconst_0
    //   367: iconst_5
    //   368: bastore
    //   369: iload 30
    //   371: iconst_1
    //   372: iadd
    //   373: istore 31
    //   375: aload 19
    //   377: iload 30
    //   379: iconst_1
    //   380: bastore
    //   381: iload 31
    //   383: iconst_1
    //   384: iadd
    //   385: istore 32
    //   387: aload 19
    //   389: iload 31
    //   391: iconst_0
    //   392: bastore
    //   393: aload_1
    //   394: invokevirtual 97	java/lang/String:getBytes	()[B
    //   397: astore 33
    //   399: aload 33
    //   401: arraylength
    //   402: istore 34
    //   404: iload 32
    //   406: iconst_1
    //   407: iadd
    //   408: istore 35
    //   410: aload 19
    //   412: iload 32
    //   414: iconst_3
    //   415: bastore
    //   416: iload 35
    //   418: iconst_1
    //   419: iadd
    //   420: istore 36
    //   422: aload 19
    //   424: iload 35
    //   426: iload 34
    //   428: i2b
    //   429: bastore
    //   430: aload 33
    //   432: iconst_0
    //   433: aload 19
    //   435: iload 36
    //   437: iload 34
    //   439: invokestatic 103	java/lang/System:arraycopy	(Ljava/lang/Object;ILjava/lang/Object;II)V
    //   442: iload 34
    //   444: iconst_5
    //   445: iadd
    //   446: istore 37
    //   448: iload 37
    //   450: iconst_1
    //   451: iadd
    //   452: istore 38
    //   454: aload 19
    //   456: iload 37
    //   458: iload_2
    //   459: bipush 8
    //   461: iushr
    //   462: i2b
    //   463: bastore
    //   464: iload 38
    //   466: iconst_1
    //   467: iadd
    //   468: istore 39
    //   470: aload 19
    //   472: iload 38
    //   474: iload_2
    //   475: sipush 255
    //   478: iand
    //   479: i2b
    //   480: bastore
    //   481: aload 18
    //   483: aload 19
    //   485: iconst_0
    //   486: iload 39
    //   488: invokevirtual 81	java/io/OutputStream:write	([BII)V
    //   491: aload_0
    //   492: aload 17
    //   494: aload 19
    //   496: iconst_4
    //   497: invokespecial 83	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:fill	(Ljava/io/InputStream;[BI)V
    //   500: aload 19
    //   502: iconst_1
    //   503: baload
    //   504: istore 40
    //   506: iload 40
    //   508: ifeq +104 -> 612
    //   511: aload 8
    //   513: invokevirtual 86	java/net/Socket:close	()V
    //   516: new 25	org/jivesoftware/smack/proxy/ProxyException
    //   519: dup
    //   520: getstatic 31	org/jivesoftware/smack/proxy/ProxyInfo$ProxyType:SOCKS5	Lorg/jivesoftware/smack/proxy/ProxyInfo$ProxyType;
    //   523: new 105	java/lang/StringBuilder
    //   526: dup
    //   527: ldc 107
    //   529: invokespecial 110	java/lang/StringBuilder:<init>	(Ljava/lang/String;)V
    //   532: aload 19
    //   534: iconst_1
    //   535: baload
    //   536: invokevirtual 114	java/lang/StringBuilder:append	(I)Ljava/lang/StringBuilder;
    //   539: invokevirtual 117	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   542: invokespecial 36	org/jivesoftware/smack/proxy/ProxyException:<init>	(Lorg/jivesoftware/smack/proxy/ProxyInfo$ProxyType;Ljava/lang/String;)V
    //   545: athrow
    //   546: astore 9
    //   548: aload 9
    //   550: astore 10
    //   552: aload 8
    //   554: astore_3
    //   555: aload_3
    //   556: ifnull +7 -> 563
    //   559: aload_3
    //   560: invokevirtual 86	java/net/Socket:close	()V
    //   563: new 105	java/lang/StringBuilder
    //   566: dup
    //   567: ldc 119
    //   569: invokespecial 110	java/lang/StringBuilder:<init>	(Ljava/lang/String;)V
    //   572: aload 10
    //   574: invokevirtual 120	java/lang/Exception:toString	()Ljava/lang/String;
    //   577: invokevirtual 123	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   580: invokevirtual 117	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   583: astore 11
    //   585: aload 10
    //   587: instanceof 125
    //   590: ifeq +118 -> 708
    //   593: new 25	org/jivesoftware/smack/proxy/ProxyException
    //   596: dup
    //   597: getstatic 31	org/jivesoftware/smack/proxy/ProxyInfo$ProxyType:SOCKS5	Lorg/jivesoftware/smack/proxy/ProxyInfo$ProxyType;
    //   600: aload 11
    //   602: aload 10
    //   604: invokespecial 128	org/jivesoftware/smack/proxy/ProxyException:<init>	(Lorg/jivesoftware/smack/proxy/ProxyInfo$ProxyType;Ljava/lang/String;Ljava/lang/Throwable;)V
    //   607: astore 12
    //   609: aload 12
    //   611: athrow
    //   612: sipush 255
    //   615: aload 19
    //   617: iconst_3
    //   618: baload
    //   619: iand
    //   620: tableswitch	default:+135 -> 755, 1:+32->652, 2:+135->755, 3:+45->665, 4:+75->695
    //   653: aload 17
    //   655: aload 19
    //   657: bipush 6
    //   659: invokespecial 83	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:fill	(Ljava/io/InputStream;[BI)V
    //   662: goto +93 -> 755
    //   665: aload_0
    //   666: aload 17
    //   668: aload 19
    //   670: iconst_1
    //   671: invokespecial 83	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:fill	(Ljava/io/InputStream;[BI)V
    //   674: aload_0
    //   675: aload 17
    //   677: aload 19
    //   679: iconst_2
    //   680: sipush 255
    //   683: aload 19
    //   685: iconst_0
    //   686: baload
    //   687: iand
    //   688: iadd
    //   689: invokespecial 83	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:fill	(Ljava/io/InputStream;[BI)V
    //   692: goto +63 -> 755
    //   695: aload_0
    //   696: aload 17
    //   698: aload 19
    //   700: bipush 18
    //   702: invokespecial 83	org/jivesoftware/smack/proxy/Socks5ProxySocketFactory:fill	(Ljava/io/InputStream;[BI)V
    //   705: goto +50 -> 755
    //   708: new 17	IOException
    //   711: dup
    //   712: aload 11
    //   714: invokespecial 129	IOException:<init>	(Ljava/lang/String;)V
    //   717: astore 13
    //   719: aload 13
    //   721: athrow
    //   722: astore 42
    //   724: goto -530 -> 194
    //   727: astore 41
    //   729: goto -213 -> 516
    //   732: astore 14
    //   734: goto -171 -> 563
    //   737: astore 44
    //   739: aload 44
    //   741: astore 10
    //   743: goto -188 -> 555
    //   746: astore 43
    //   748: aload 43
    //   750: astore 16
    //   752: goto -539 -> 213
    //   755: aload 8
    //   757: areturn
    //
    // Exception table:
    //   from	to	target	type
    //   51	152	207	java/lang/RuntimeException
    //   189	194	207	java/lang/RuntimeException
    //   194	207	207	java/lang/RuntimeException
    //   237	506	207	java/lang/RuntimeException
    //   511	516	207	java/lang/RuntimeException
    //   516	546	207	java/lang/RuntimeException
    //   612	705	207	java/lang/RuntimeException
    //   51	152	546	java/lang/Exception
    //   194	207	546	java/lang/Exception
    //   237	506	546	java/lang/Exception
    //   516	546	546	java/lang/Exception
    //   612	705	546	java/lang/Exception
    //   189	194	722	java/lang/Exception
    //   511	516	727	java/lang/Exception
    //   559	563	732	java/lang/Exception
    //   38	51	737	java/lang/Exception
    //   38	51	746	java/lang/RuntimeException
  }

  public Socket createSocket(String paramString, int paramInt)
    throws IOException, UnknownHostException
  {
    return socks5ProxifiedSocket(paramString, paramInt);
  }

  public Socket createSocket(String paramString, int paramInt1, InetAddress paramInetAddress, int paramInt2)
    throws IOException, UnknownHostException
  {
    return socks5ProxifiedSocket(paramString, paramInt1);
  }

  public Socket createSocket(InetAddress paramInetAddress, int paramInt)
    throws IOException
  {
    return socks5ProxifiedSocket(paramInetAddress.getHostAddress(), paramInt);
  }

  public Socket createSocket(InetAddress paramInetAddress1, int paramInt1, InetAddress paramInetAddress2, int paramInt2)
    throws IOException
  {
    return socks5ProxifiedSocket(paramInetAddress1.getHostAddress(), paramInt1);
  }
}